package cc.co.taciano.agenda2.bo;

import java.util.List;
import cc.co.taciano.agenda2.beans.Usuario;
import cc.co.taciano.agenda2.beans.Perfil;
import cc.co.taciano.agenda2.dao.Dao;
import cc.co.taciano.agenda2.dao.UsuarioDao;
import cc.co.taciano.agenda2.dao.util.DataAccessLayerException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Classe de negócio do bean Usuário do sistema Avalia Cesed.
 * @author Taciano Morais Silva
 * @version 29/10/2008, 11h32m
 * @since 29/10/2008, 11h32m
 */
public class UsuarioBO {

    public List<Usuario> listar() throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            return dao.findAll();
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.listar");
        }
    }

    public Usuario buscar(Integer id) throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            return dao.find(id);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.buscar");
        }
    }

    public void incluir(Usuario usuario) throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            dao.create(usuario);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.incluir");
        }
    }

    public void alterar(Usuario usuario) throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            dao.update(usuario);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.alterar");
        }
    }

    public void excluir(Usuario usuario) throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            dao.remove(usuario);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.excluir");
        }
    }

    public void excluir(Integer id) throws AgendaException {
        try {
            Dao<Usuario> dao = new UsuarioDao();
            dao.remove(id);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.excluir.id");
        }
    }
    
        /**
     * Pesquisar usuário filtrando por login e nome.
     * @param login O login do usuário.
     * @param nome O nome do usuário.
     */
    public List<Usuario> pesquisar(String login, String nome, Perfil perfil) throws AgendaException {
        try {
            verificarTamMin(login);
            verificarTamMin(nome);
            UsuarioDao dao = new UsuarioDao();
            return dao.pesquisar(login, nome, perfil);
        } catch (DataAccessLayerException ex) {
            Logger.getLogger(UsuarioBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new AgendaException("erro.usuario.bo.pesquisar", ex);
        }
    }

    /**
     * 
     * @param texto
     * @throws br.cesed.lti.cesuweb.bo.CesuWebException
     */
    private void verificarTamMin(String texto) throws AgendaException {
        if (texto != null && !texto.equals("") && texto.length() < 3) {
            throw new AgendaException("erro.usuario.bo.pesquisar.tam.min");
        }
    }
}
